package com.shujia.day20.lambda5;

interface Inter1 {
    void fun1();
}

interface Inter2 {
    void fun1(String s);
}

interface Inter3 {
    String fun1(String s1, String s2);
}

public class LambdaDemo {
    public static void main(String[] args) {
        /**
         * 场景1
         */
        //无参数，无返回值
//        show1(()->{
//            System.out.println("好好学习，天天向上！");
//        });
        // 如果方法逻辑体只有一行的时候，可以将大括号省略
//        show1(()-> System.out.println("好好学习，天天向上！"));

        /**
         * 场景2
         */
        // 有一个参数，无返回值
//        show2((String s)->{
//            System.out.println(s+": 江川");
//        });
        // 左边的参数类型可以省略不写, jvm会做自动类型上下文推断
//        show2((s) -> System.out.println(s + ": 江川"));
        // 若只有一个参数，小括号可以省略不写
//        show2(s -> System.out.println(s + ": 江川"));

        /**
         * 场景3
         */
        //有两个以上的参数，有返回值，并且 Lambda 体中有多条语句
//        show3((String s1,String s2)->{
//            return s1+"-数加-"+s2;
//        });
        // 若Lambda 体中只有一条语句，return和大括号都可以省略不写
//        show3((s1, s2) -> s1 + "-数加-" + s2);

    }

    public static void show3(Inter3 inter3) {
        System.out.println(inter3.fun1("hello", "world"));
    }

    public static void show2(Inter2 inter2) {
        inter2.fun1("hello");
    }

    public static void show1(Inter1 inter1) {
        inter1.fun1();
    }
}
